(function () {
  // 定义抽象类
  abstract class Animal {
    name: string;
    age: number;
    constructor(name: string, age: number) {
      this.name = name;
      this.age = age;
    }
    // 抽象方法：abstract开头，没有方法体
    // 抽象方法只能定义在抽象类中，子类必须对抽象方法进行重写
    abstract sayHello(): void;
  }

  // 定义子类 Dog 继承 Animal
  class Dog extends Animal {
    // 添加子类独有的属性
    color: string;
    constructor(naem: string, age: number, color: string) {
      super(naem, age); // 调用父类的构造函数
      this.color = color;
    }
    // 重写父类中的方法
    sayHello() {
      console.log(`我是${this.name}今年${this.age}岁,我的颜色是${this.color}`);
    }
  }

  const dog = new Dog("旺财", 2, "黑色");
  console.log(dog);
  dog.sayHello();

  // const animal = new Animal("蛇", 3); // 警告：无法创建抽象类的实例
})();
